#ifndef __HASHMAP_H_
#define __HASHMAP_H_

#include <string>

class HashMap // 键值对
{
public:
    using ElememntType = int;           
    // using ElememntType = std::string;
    HashMap(const int &size);
    void Insert(const std::string& key,const ElememntType &value);
    void Remove(const std::string& key);
    ElememntType* GetByKey(const std::string& key);
    ElememntType& operator[](const std::string& key);
    void show();
    void showByGoup();

private:
    struct Node // 结点
    {
        Node(const std::string &key, const ElememntType &value) : key(key), value(value) ,next(nullptr){}
        std::string key;    // 键
        ElememntType value; // 值
        Node *next;         // 指向下一个结点的指针
    };
    Node **array;   // 数组指针
    const int size; // 数组大小
    // 哈希函数
    int Hash(const std::string &key);
};

#endif
